package com.zpark.evaluate;

import com.zpark.entity.EvaluateData;
import com.zpark.entity.EvaluateReport;
import com.zpark.entity.HistoryData;

import java.util.List;

/**
 * 评估链：把所有的评估，都串到这个链条上
 * 责任链设计模式中的链
 */
public class EvaluateChain {

    private List<Evaluate> evaluates;//链条上的所有责任；七个评估模型：Evaluate这个抽象类的七个子类

    //只提供带参数的构造方法：要使用这个链，就必须把所有的责任都注册进来
    public EvaluateChain(List<Evaluate> evaluates) {
        this.evaluates = evaluates;
    }

    private int position;//位置，链条走到了哪里；什么时候结束链条

    public void doChain(EvaluateData evaluateData, HistoryData historyData, EvaluateReport evaluateReport){
        if(position<evaluates.size()){//还没有走到链条的最后

            Evaluate evaluate = evaluates.get(position);

            position++;//让链条中执行的位置往后挪
            //执行链条中的这个责任
            evaluate.eval(evaluateData,historyData,evaluateReport,this);


        }
    }
}
